home *** CD-ROM | disk | FTP | other *** search
- /*
- File: ClockGbl.cpp
-
- Contains: xxx put contents here xxx
-
- Owned by: Richard Rodseth
-
- Copyright: © 1995 by Apple Computer, Inc., all rights reserved.
-
- Change History (most recent first):
-
- <9> 10/16/95 RR #1293067 Pass shouldDispose to
- RegisterWindow
- <8> 9/12/95 RR Various activation problems. Added a
- floating window
- <7> 9/4/95 TJ Added Includes to Compile with out
- PC-Headers.
- <6> 9/1/95 RR # 1244639 Added fDisplaySettingsDialog &
- RemovingFrame()
- <5> 7/10/95 RR Misc. cleanup and bug fixes for shared
- window
- <4> 7/7/95 RR Some refactoring. Fix
- CreatePropObjSpecifier to deal with
- non-persistent frame. Set source frame of
- dialogs.
- <3> 6/30/95 RR 1242642 BB Ref counting fixes. Display
- settings window is saved as an ID, not a
- window
- <2> 6/3/95 TJ Added #includes for compile with out PCH
- <1> 5/31/95 RR first checked in
-
- To Do:
- */
-
- #ifndef _CLOCKGBL_
- #include "ClockGbl.h"
- #endif
-
- #ifndef _TEMPOBJ_
- #include "TempObj.h"
- #endif
-
- #ifndef _ODMEMORY_
- #include "ODMemory.h"
- #endif
-
- #ifndef _ODUTILS_
- #include "ODUtils.h"
- #endif
-
- #ifndef SOM_ODPersistentObject_xh
- #include "PstObj.xh"
- #endif
-
- #ifndef SOM_ODPart_xh
- #include "Part.xh"
- #endif
-
- #ifndef SOM_ODFrame_xh
- #include "Frame.xh"
- #endif
-
- #ifndef __STRINGS__
- #include <Strings.h>
- #endif
-
- #ifndef __TEXTUTILS__
- #include <TextUtils.h>
- #endif
-
- #ifndef SOM_ODSession_xh
- #include <ODSessn.xh>
- #endif
-
- #ifndef _CLOCKDEF_
- #include "ClockDef.h"
- #endif
-
- #ifndef _USERSRCM_
- #include "UseRsrcM.h"
- #endif
-
- #ifndef SOM_ODWindowState_xh
- #include <WinStat.xh>
- #endif
-
- #ifndef SOM_ODDispatcher_xh
- #include <Disptch.xh>
- #endif
-
- #ifndef __DIALOGS__
- #include "Dialogs.h"
- #endif
-
- #ifndef SOM_ODWindow_xh
- #include <Window.xh>
- #endif
-
- #ifndef _ORDCOLL_
- #include <OrdColl.h>
- #endif
-
- #ifndef _CLOCKFRM_
- #include "ClockFrm.h"
- #endif
-
- ClockGlobals* gClockGlobals = kODNULL;
-
- //=========================================================================
- // Class ClockGlobals
- //=========================================================================
-
- ClockGlobals::ClockGlobals()
- {
- fRefCount = 0;
- fMenuBar = kODNULL;
- fDisplaySettingsWindow = kODNULL;
- fDispaySettingsDialog = kODNULL;
- fSession = kODNULL;
- fDialogFrames = kODNULL;
- }
-
- ClockGlobals::~ClockGlobals()
- {
- }
-
- void ClockGlobals::InitClockGlobals(Environment* ev, ODSession* session, ODPart* part)
- {
- fSession = session;
- fFrameView = fSession->Tokenize(ev, kODViewAsFrame);
- fDisplaySettingsPresentation = fSession->Tokenize(ev, kDisplaySettingsFrame);
- fAlarmSettingsPresentation = fSession->Tokenize(ev, kAlarmSettingsFrame);
- fDialogFrames = new OrderedCollection;
- }
-
- void ClockGlobals::AcquireGlobals(Environment* ev)
- {
- fRefCount++;
- }
-
- void ClockGlobals::ReleaseGlobals(Environment* ev)
- {
- fRefCount--;
- if (fRefCount == 0)
- this->FreeGlobals(ev);
- }
-
- void ClockGlobals::FreeGlobals(Environment* ev)
- {
- ODWindow* window = fSession->GetWindowState(ev)->AcquireWindow(ev, fDisplaySettingsWindow);
- if (window)
- {
- window->CloseAndRemove(ev);
- }
- if (fDispaySettingsDialog)
- {
- //somPrintf("FreeGlobals::Deleting shared platform window\n");
- CloseDialog(fDispaySettingsDialog);
- ODDisposePtr(fDispaySettingsDialog);
- }
-
- ODDeleteObject(fDialogFrames);
- gClockGlobals = kODNULL;
- delete this;
- }
-
- ODSession* ClockGlobals::GetSession(Environment* ev)
- {
- return fSession;
- }
-
- void ClockGlobals::CreateDisplaySettingsDialog(Environment* ev, ODFrame* sourceFrame)
- {
- ODSLong savedRefNum;
- ODWindow* settingsWindow = kODNULL;
- ODPart* sourcePart = sourceFrame->AcquirePart(ev);
-
- BeginUsingLibraryResources(savedRefNum);
- fDispaySettingsDialog = GetNewDialog(kClock_DisplaySettingsDialogID ,(Ptr)ODNewPtr(sizeof(DialogRecord)),(WindowPtr)-1L);
- EndUsingLibraryResources(savedRefNum);
-
- settingsWindow = fSession->GetWindowState(ev)->
- RegisterWindow(ev, fDispaySettingsDialog,
- kODNonPersistentFrameObject,
- kODFalse, // Keeps draft open
- kODFalse, // Is resizable
- kODFalse, // Is floating
- kODFalse, // don't save
- kODFalse, // should dispose
- sourcePart,
- fFrameView, // View Type
- fDisplaySettingsPresentation, // Presentation
- sourceFrame);
-
-
- if (fDispaySettingsDialog && settingsWindow)
- {
- settingsWindow->Open(ev);
- fDisplaySettingsWindow = settingsWindow->GetID(ev);
- ODReleaseObject(ev, settingsWindow);
- }
- ODReleaseObject(ev, sourcePart);
- }
-
- void ClockGlobals::CreateAlarmSettingsDialog(Environment* ev, ODFrame* sourceFrame)
- {
- ODSLong savedRefNum;
- ODWindow* settingsWindow = kODNULL;
- ODPart* sourcePart = sourceFrame->AcquirePart(ev);
-
- BeginUsingLibraryResources(savedRefNum);
- fAlarmSettingsDialog = GetNewDialog(kClock_AlarmSettingsDialogID ,(Ptr)ODNewPtr(sizeof(DialogRecord)),(WindowPtr)-1L);
- EndUsingLibraryResources(savedRefNum);
-
- settingsWindow = fSession->GetWindowState(ev)->
- RegisterWindow(ev, fAlarmSettingsDialog,
- kODNonPersistentFrameObject,
- kODFalse, // Keeps draft open
- kODFalse, // Is resizable
- kODFalse, // Is floating
- kODFalse, // don't save
- kODFalse, // should dispose
- sourcePart,
- fFrameView, // View Type
- fAlarmSettingsPresentation, // Presentation
- sourceFrame);
-
-
- if (fAlarmSettingsDialog && settingsWindow)
- {
- settingsWindow->Open(ev);
- fAlarmSettingsWindow = settingsWindow->GetID(ev);
- ODReleaseObject(ev, settingsWindow);
- }
- ODReleaseObject(ev, sourcePart);
- }
-
- void ClockGlobals::OpenDisplaySettingsDialog(Environment* ev, ODFrame* sourceFrame)
- {
- ODPart* sourcePart = sourceFrame->AcquirePart(ev);
- ODWindow* window = fSession->GetWindowState(ev)->AcquireWindow(ev, fDisplaySettingsWindow);
- if (window)
- {
- window->Show(ev);
- window->Select(ev);
- ODReleaseObject(ev, window);
- }
- else
- {
- this->CreateDisplaySettingsDialog(ev, sourceFrame);
- this->OpenDisplaySettingsDialog(ev, sourceFrame); // Ooh. Sneaky
- }
- ODReleaseObject(ev, sourcePart);
- }
-
- void ClockGlobals::CloseDisplaySettingsWindow(Environment* ev)
- {
- ODWindow* window = fSession->GetWindowState(ev)->AcquireWindow(ev, fDisplaySettingsWindow);
- if (window)
- {
- window->Hide(ev);
- }
- ODReleaseObject(ev, window);
- }
-
- void ClockGlobals::OpenAlarmSettingsDialog(Environment* ev, ODFrame* sourceFrame)
- {
- ODPart* sourcePart = sourceFrame->AcquirePart(ev);
- ODWindow* window = fSession->GetWindowState(ev)->AcquireWindow(ev, fAlarmSettingsWindow);
- if (window)
- {
- window->Show(ev);
- window->Select(ev);
- ODReleaseObject(ev, window);
- }
- else
- {
- this->CreateAlarmSettingsDialog(ev, sourceFrame);
- this->OpenAlarmSettingsDialog(ev, sourceFrame); // Ooh. Sneaky
- }
- ODReleaseObject(ev, sourcePart);
-
-
- }
-
- void ClockGlobals::CloseAlarmSettingsWindow(Environment* ev)
- {
- ODWindow* window = fSession->GetWindowState(ev)->AcquireWindow(ev, fAlarmSettingsWindow);
- if (window)
- {
- window->Hide(ev);
- }
- ODReleaseObject(ev, window);
- }
-
- void ClockGlobals::AcquiringFocus(Environment* ev, ODFrame* activatingFrame)
- {
- ODWindow* settingsWindow = fSession->GetWindowState(ev)->AcquireWindow(ev, fDisplaySettingsWindow);
- if (settingsWindow)
- {
- ODPart* activatingPart = activatingFrame->AcquirePart(ev);
- settingsWindow->GetRootFrame(ev)->ChangePart(ev, activatingPart);
- settingsWindow->SetSourceFrame(ev, activatingFrame);
- ODReleaseObject(ev, activatingPart);
-
- }
- ODReleaseObject(ev, settingsWindow);
- }
-
- void ClockGlobals::ResumeWindows(Environment* ev, ODBoolean processChange)
- {
- #if defined(ODDebug)
- // somPrintf("ClockGlobals::ShowWindows\n");
- #endif
- OrderedCollectionIterator iter(fDialogFrames);
-
- for (ODFrame* aFrame = (ODFrame*)iter.First();
- iter.IsNotComplete();
- aFrame = (ODFrame*)iter.Next())
- {
- ClockFrame* clockFrame = (ClockFrame*) aFrame->GetPartInfo(ev);
- #if defined(ODDebug)
- // somPrintf("ClockGlobals::ShowWindows. Frame = %x\n", aFrame);
- #endif
- if (processChange)
- clockFrame->ResumeProcess(ev);
- else
- clockFrame->ResumeFocus(ev);
- }
- }
-
- void ClockGlobals::SuspendWindows(Environment* ev, ODBoolean processChange)
- {
- #if defined(ODDebug)
- // somPrintf("ClockGlobals::HideWindows\n");
- #endif
- OrderedCollectionIterator iter(fDialogFrames);
-
- for (ODFrame* aFrame = (ODFrame*)iter.First();
- iter.IsNotComplete();
- aFrame = (ODFrame*)iter.Next())
- {
- ClockFrame* clockFrame = (ClockFrame*) aFrame->GetPartInfo(ev);
- #if defined(ODDebug)
- // somPrintf("ClockGlobals::HideWindows. Frame = %x\n", aFrame);
- #endif
- if (processChange)
- clockFrame->SuspendProcess(ev);
- else
- clockFrame->SuspendFocus(ev);
- }
-
- }
-
- void ClockGlobals::RemovingFrame(Environment* ev, ODFrame* frame)
- {
- /* TempODWindow window = fWindowState->AcquireWindow(ev, fDisplaySettingsWindow);
- if (window)
- {
- TempODPart displayWinRootPart = window->GetRootFrame(ev)->AcquirePart(ev);
- // -- TÇ tempobj'd
- if (displayWinRootPart == fClockPart->GetPartWrapper())
- {
- window->CloseAndRemove(ev);
- window = kODNULL; //!!!!! Otherwise Temp obj does extra release
- gClockGlobals->fDisplaySettingsWindow = 0;
- }
- }
- */
- TempODWindow window = fSession->GetWindowState(ev)->AcquireWindow(ev, fDisplaySettingsWindow);
- if (window)
- {
- TempODFrame sourceFrame = window->AcquireSourceFrame(ev);
- if (ODObjectsAreEqual(ev, sourceFrame, frame))
- {
- window->CloseAndRemove(ev);
- window = kODNULL; //!!!!! Otherwise Temp obj does extra release
- fDisplaySettingsWindow = 0;
- }
- }
-
- }
-
- void ClockGlobals::AddDialogFrame(Environment* ev, ODFrame* frame)
- {
- if (fDialogFrames)
- {
- if (!fDialogFrames->Contains(frame))
- {
- #if defined(ODDebug)
- // somPrintf("Adding Dialog Frame %x\n", frame);
- #endif
- fDialogFrames->AddLast(frame);
- frame->Acquire(ev);
- }
- }
- }
-
- void ClockGlobals::RemoveDialogFrame(Environment* ev, ODFrame* frame)
- {
- if (fDialogFrames && fDialogFrames->Contains(frame))
- {
- #if defined(ODDebug)
- // somPrintf("Removing Dialog Frame %x\n", frame);
- #endif
- fDialogFrames->Remove(frame);
- ODReleaseObject(ev, frame);
- }
- }
-
- void ClockGlobals::AdjustDialogs(Environment* ev)
- {
- OrderedCollectionIterator iter(fDialogFrames);
-
- for (ODFrame* aFrame = (ODFrame*)iter.First();
- iter.IsNotComplete();
- aFrame = (ODFrame*)iter.Next())
- {
- ClockFrame* clockFrame = (ClockFrame*) aFrame->GetPartInfo(ev);
- clockFrame->Adjust(ev);
- }
- }
-
- //-------------------------------------------------------------------------
- // Utilities
- //-------------------------------------------------------------------------
-
-
- //------------------------------------------------------------------------------
- // CheckMarkMenu
- //------------------------------------------------------------------------------
-
- void CheckMarkMenu(MenuHandle menu, Str255 checkItem, ODBoolean checkIt)
- {
- ODSShort numMenuItems = CountMItems( menu );
- Str255 menuItemString;
-
- for (ODSShort menuItemNum = 1; menuItemNum <= numMenuItems; menuItemNum++)
- {
- GetMenuItemText( menu, menuItemNum, menuItemString );
-
- if ( IUEqualString(checkItem, menuItemString) == 0 )
- {
- if ( checkIt )
- CheckItem( menu, menuItemNum, kODTrue );
- else
- CheckItem( menu, menuItemNum, kODFalse );
- }
- }
- }
-
-
- //------------------------------------------------------------------------------
- // StyleToString
- //------------------------------------------------------------------------------
-
-
- void StyleToString(ODUByte style,
- Str255* styleName )
- {
- char tStyleStr[12];
-
- switch (style) {
- case normal: strcpy((char *)&tStyleStr ,"Plain\0"); break; // • • Move to resource
- case bold: strcpy((char *)&tStyleStr ,"Bold\0"); break; // • • for localization
- case italic: strcpy((char *)&tStyleStr ,"Italic\0"); break; // • • purposes
- case underline: strcpy((char *)&tStyleStr ,"Underline\0"); break;
- case outline: strcpy((char *)&tStyleStr ,"Outline\0"); break;
- case shadow: strcpy((char *)&tStyleStr ,"Shadow\0"); break;
- case condense: strcpy((char *)&tStyleStr ,"Condense\0"); break;
- case extend: strcpy((char *)&tStyleStr ,"Extend\0"); break;
- default:
- strcpy((char *)&tStyleStr ,"Plain\0");
- }
-
- BlockMove((Ptr)c2pstr((char *)&tStyleStr),(Ptr)styleName,12);
- }
-
- //------------------------------------------------------------------------------
- // AboutDialogFilter
- //------------------------------------------------------------------------------
-
- pascal Boolean AboutDialogFilter(DialogPtr dialog,
- EventRecord* event,
- short* itemHit)
- {
- ODBoolean handled = kODFalse;
-
- Environment* ev = somGetGlobalEnvironment();
-
- if (event->what == nullEvent)
- {
- gClockGlobals->GetSession(ev)->GetDispatcher(ev)->Dispatch(ev, (ODEventData*)event);
- }
- else if (event->what == updateEvt &&
- (WindowPtr) event->message != dialog)
- {
- gClockGlobals->GetSession(ev)->GetDispatcher(ev)->Dispatch(ev, (ODEventData*)event);
- }
- else if (event->what == activateEvt &&
- (WindowPtr) event->message != dialog)
- {
- //$$$$$ Is this serving any purpose?
- gClockGlobals->GetSession(ev)->GetDispatcher(ev)->Dispatch(ev, (ODEventData*)event);
- }
- else if (event->what == mouseDown)
- {
- handled = kODTrue;
- *itemHit = 0;
- }
- else if (event->what == mouseUp)
- {
- handled = kODTrue;
- *itemHit = 1;
- }
- else if ((event->what == keyDown) || (event->what == autoKey))
- {
- handled = kODTrue;
- *itemHit = 1;
-
- }
-
- return handled;
- }
-
- //------------------------------------------------------------------------------
- // ClockDialogFilter
- //------------------------------------------------------------------------------
-
- pascal Boolean ClockDialogFilter(DialogPtr dialog,
- EventRecord* event,
- short* itemHit)
- {
- ODBoolean handled = kODFalse;
-
- Environment* ev = somGetGlobalEnvironment();
-
- if (event->what == nullEvent)
- {
- gClockGlobals->GetSession(ev)->GetDispatcher(ev)->Dispatch(ev, (ODEventData*)event);
- }
- else if (event->what == updateEvt &&
- (WindowPtr) event->message != dialog)
- {
- gClockGlobals->GetSession(ev)->GetDispatcher(ev)->Dispatch(ev, (ODEventData*)event);
- }
- else if (event->what == activateEvt &&
- (WindowPtr) event->message != dialog)
- {
- gClockGlobals->GetSession(ev)->GetDispatcher(ev)->Dispatch(ev, (ODEventData*)event);
- }
- else if ((event->what == keyDown) || (event->what == autoKey))
- {
- #define kMyButtonDelay 8
- long waitTicks;
- short itemKind;
- Handle itemHandle;
- Rect itemRect;
- char key = (char)(event->message & charCodeMask);
- const char kReturnKey = 13;
- const char kEnterKey = 3;
- const char kEscKey = 27;
-
- switch(key)
- {
- case kReturnKey:
- case kEnterKey:
- /* change whatever is the current item is to the OK item */
- *itemHit = ok;
- GetDialogItem(dialog,ok,&itemKind,&itemHandle,&itemRect);
- HiliteControl((ControlHandle)itemHandle,kControlButtonPart);
- Delay(kMyButtonDelay,&waitTicks);/* wait about 8 ticks */
- HiliteControl((ControlHandle)itemHandle,kODFalse);
- handled = kODTrue;
- break;
- case kEscKey:
- *itemHit = cancel;
- GetDialogItem(dialog,cancel,&itemKind,&itemHandle,&itemRect);
- HiliteControl((ControlHandle)itemHandle,kControlButtonPart);
- Delay(kMyButtonDelay,&waitTicks);
- HiliteControl((ControlHandle)itemHandle,kODFalse);
- handled = kODTrue;
- break;
- }
- }
-
- return handled;
- }
-